package com.suixuan.support.context;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import com.suixuan.support.util.SecurityUtils;

/**
 * 
 * @Title: ApplicationContextUsers.java
 * @Package com.suixuan.spring.security
 * @Description: 存储登陆用户UUID与用户JSessionId
 * @author suixuan
 * @date 2010-11-8 下午02:49:34
 * @version V1.0
 */
public class ContextHolderStrategyUsers {
	/**
	 * 存放用户登陆后的JsessionId和UUID
	 */
	private static Map<String, String> contextUUID = new HashMap<String, String>();

	/**
	 * 单例
	 */
	private static ContextHolderStrategyUsers contextHolderStrategyUsers = new ContextHolderStrategyUsers();

	/**
	 * 单例方法
	 * 
	 * @Title getInstance
	 * @return {@link ContextHolderStrategyUsers}
	 * 
	 */
	public static ContextHolderStrategyUsers getInstance() {
		return contextHolderStrategyUsers;
	}

	/**
	 * JsessionId
	 * 
	 * @Title put
	 * @param jsessionId
	 *            JsessionId
	 * 
	 */
	public static void put(String jsessionId) {
		jsessionId = convertJsessionId(jsessionId);

		String uuid = UUID.randomUUID().toString();
		uuid = SecurityUtils.md5PasswordEncoder(uuid, uuid);

		contextUUID.put(jsessionId, uuid);
	}

	/**
	 * 通过当前JsessionId传递获取JessionId和UUID放置于页面
	 * 
	 * @Title findJsessionAndUUID
	 * @param jsessionId
	 *            JsessionId
	 * @return JsessionId和UUID
	 * 
	 */
	public static String[] findJsessionAndUUID(String jsessionId) {

		jsessionId = convertJsessionId(jsessionId);
		String uuid = contextUUID.get(jsessionId);

		return new String[] { jsessionId, uuid };
	}

	/**
	 * 通过JsessionId获取UUID
	 * 
	 * @Title findUUIDByJsessionId
	 * @param jsessionId
	 *            JsessionId
	 * @return UUID
	 * 
	 */
	public static String findUUIDByJsessionId(String jsessionId) {
		jsessionId = convertJsessionId(jsessionId);
		return contextUUID.get(jsessionId);
	}

	/**
	 * 移除
	 * 
	 * @Title remove
	 * @param jsessionId
	 *            JsessionId
	 * 
	 */
	public static void remove(String jsessionId) {
		jsessionId = convertJsessionId(jsessionId);
		contextUUID.remove(jsessionId);
	}

	/**
	 * 操作用户是否为正常登陆用户
	 * 
	 * @Title isHasJsessionAndUUID
	 * @param jsessionId
	 *            JsessionId
	 * @param uuid
	 *            UUID
	 * @return True:当前登陆用户 False:非当前登陆用户
	 * 
	 */
	public static boolean isHasJsessionAndUUID(String jsessionId, String uuid) {

		if (contextUUID.containsKey(jsessionId) && contextUUID.containsValue(uuid)) {
			return true;
		}

		return false;
	}

	/**
	 * 将JsessionId进行Md5加密
	 * 
	 * @Title convertJsessionId
	 * @param jsessionId
	 *            JsessionId
	 * @return Md5加密后的JsessionId
	 * 
	 */
	public static String convertJsessionId(String jsessionId) {
		return SecurityUtils.md5PasswordEncoder(jsessionId, jsessionId);
	}

	private ContextHolderStrategyUsers() {
		super();
	}

}